<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*定义一个Person类*/
    function Person(_name,_age,_weight,_height){
        this.init(_name,_age,_weight,_height);
    }

    /*使用原型的方式定义Person类的public属性：name,age,weight,height，使用原型的方式添加的属性都是public的*/
    Person.prototype.name;
    Person.prototype.age;
    Person.prototype.weight;
    Person.prototype.height;
    /*使用原型的方式给Person类添加public方法，使用原型的方式添加的方法都是public的*/
    /*使用原型的方式给Person类添加init方法;初始化方法为创建对象的时候调用*/
    Person.prototype.init = function(_name,_age,_weight,_height) {
        if(_name != undefined && _age!=undefined && _weight!=undefined && _height!=undefined){
            this.name = _name;
            this.age = _age;
            this.weight=_weight;
            this.height=_height;
            document.writeln("this.name="+this.name+",this.age="+this.age+",this.weight="+this.weight+",this.height="+this.height);
        }

    };
    /*使用原型的方式给Person类添加show方法*/
    Person.prototype.show = function(){
        document.writeln("show method");
    };
    document.write("<pre>");
    var p1 = new Person("孤傲苍狼",24,115,160);
    var p2 = new Person("白虎神皇",25,120,170);
    var p3 = new Person();
    p3.init("玄天邪帝",26,130,180);//调用public方法init初始化p3对象
    document.writeln("p1 instanceof Person的结果是："+(p1 instanceof Person));//p1是Person类的实例，结果是true
    document.writeln("p2 instanceof Person的结果是："+(p2 instanceof Person));//p2是Person类的实例，结果是true
    document.writeln("p3 instanceof Person的结果是："+(p3 instanceof Person));//p3是Person类的实例，结果是true
    //当==两边的内容是对象或者是对象的函数属性时，则比较内存地址是否相等
    document.writeln("当==两边的内容是对象或者是对象的函数属性时，则比较内存地址是否相等");
    document.writeln("比较p1和p2这两个对象的show方法的内存地址是否一样：p1.show == p2.show的结果是："+(p1.show == p2.show));//true
    document.writeln("p1.show == p2.show的结果是："+(p1.show == p2.show)+"，这证明p1对象和p2对象共享一个show方法，在内存中show方法的代码只有一份，存放在内存的一块区域");//true
    document.writeln("p1.name="+p1.name+"，p1.age="+p1.age+"，p1.weight="+p1.weight+"，p1.height="+p1.height);//访问公有属性，这是可以正常访问的
    document.writeln("p2.name="+p2.name+"，p2.age="+p2.age+"，p2.weight="+p2.weight+"，p2.height="+p2.height);//访问公有属性，这是可以正常访问的
    p3.name="灭世魔尊";//为公共属性重新赋值
    document.writeln("p3.name="+p3.name);//访问公有属性，这是可以正常访问的
    p1.show();//调用类的公共函数，这次允许的
    document.write("</pre>");
    /**
     * this.name=孤傲苍狼,this.age=24,this.weight=115,this.height=160
     this.name=白虎神皇,this.age=25,this.weight=120,this.height=170
     this.name=玄天邪帝,this.age=26,this.weight=130,this.height=180
     p1 instanceof Person的结果是：true
     p2 instanceof Person的结果是：true
     p3 instanceof Person的结果是：true
     当==两边的内容是对象或者是对象的函数属性时，则比较内存地址是否相等
     比较p1和p2这两个对象的show方法的内存地址是否一样：p1.show == p2.show的结果是：true
     p1.show == p2.show的结果是：true，这证明p1对象和p2对象共享一个show方法，在内存中show方法的代码只有一份，存放在内存的一块区域
     p1.name=孤傲苍狼，p1.age=24，p1.weight=115，p1.height=160
     p2.name=白虎神皇，p2.age=25，p2.weight=120，p2.height=170
     p3.name=灭世魔尊
     show method
     * */
</script>
</body>
</html>